一道简单的贪心题。
题意
$x$ 轴上有 $n$ 个点($x_i\in\N^\ast$),每个点有权值 $v_i$,有一小人从原点出发,需要选定 $k$ 个位置进行操作,操作方法是:先走到距离最远的点,操作之,在走回来的路上顺路操作需要操作的点。操作第 $i$ 个点会获得 $v_i$ 的收益,走 $1$ 个单位长度会获得 $1$ 的收益,对每个 $k\in[1,n]$ 分别求出最大收益。
$n\le 10^5$,$x_i\le 10^8$,$v_i\le 1000$。
link: https://www.luogu.com.cn/problem/P2672
source: PJ 2015
做法
容易知道 $k$ 的最优选择(之一)一定是 $k-1$ 的最优选择(之一)的超集。
按 $v_i$ 和 $2x_i+v_i$ 分别维护两个点的 std::set
,每次贪心选择即可。
代码
1 |
|